# ifndef _BS_HEAP_H_
# define _BS_HEAP_H_


typedef enum _e_cmp_
{
    E_CMP_LESS = 0,
    E_CMP_EQUAL,
    E_CMP_GREATER,
    E_CMP_ERROR = 99
}E_CMP_t;


typedef struct _bs_heap_t BS_HEAP_t;
struct _bs_heap_t
{
    /*
    @ 功能
        添加元素
    @ 参数
        bsHeap:通过 bsHeapCreate 创建的二叉堆指针
        data:传入的数据指针
        len:传入的数据长度
    */
    int (*add)(BS_HEAP_t* bsHeap, void* data, int len);

    /*
    @ 功能
        弹出堆顶元素
    @ 参数
        bsHeap:通过 bsHeapCreate 创建的二叉堆指针
    */
    void* (*pop)(BS_HEAP_t* bsHeap);

    /*
    @ 功能
        析构二叉堆结构
    @ 参数
        bsHeap:通过 bsHeapCreate 创建的二叉堆指针
    */
    void (*destruct)(BS_HEAP_t** pBsHeap);
    /*
    @ 不允许操作
    */
    void* body;
};

extern BS_HEAP_t* bsHeapCreate(int cap, int max, E_CMP_t(*cmp)(void*, void*));
#endif


